class Solution {
public:
    //题意就是玩扫雷点了一次 坐标放在click里面了 让你根据这次的点击修改board并返回
    int arr[8][2]={{1,0},{1,1},{1,-1},{-1,0},{-1,1},{-1,-1},{0,1},{0,-1}};
    int m;
    int n;
    vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click) 
    {
        m=board.size();
        n=board[0].size();
        int x=click[0],y=click[1];
        if(board[x][y]=='M')
        {
            board[x][y]='X';
            return board;
        }
        dfs(board,x,y);
        return board;
    }
    void dfs(vector<vector<char>>& board,int x,int y)
    {
        int count=0;
        for(int i=0;i<8;i++)
        {
            int nx=x+arr[i][0];
            int ny=y+arr[i][1];
            if(nx>=0 && nx<m && ny>=0 && ny<n && board[nx][ny]=='M') count++;
        }
        if(count)
        {
            board[x][y]=count+'0';
            return;
        }
        else
        {
            board[x][y]='B';
            for(int i=0;i<8;i++)
            {
                int nx=x+arr[i][0];
                int ny=y+arr[i][1];
                if(nx>=0 && nx<m && ny>=0 && ny<n && board[nx][ny]=='E')
                {
                    dfs(board,nx,ny);
                }
            }
        }
    }
};